﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NetDh.Cache
{
    /*
     * 如果你的缓存介质会有切换的可能，则建议用接口操作，
     * 以下是缓存常用的操作。如果需要更多缓存操作，请自行添加函数。
     */

    /// <summary>
    /// 定义缓存处理动作
    /// </summary>
    public interface ICacheHandle
    {
        /// <summary>
        /// 取缓存
        /// </summary>
        /// <typeparam name="T">T可以是引用类型，也可以是值类型</typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        T Get<T>(string key);
        /// <summary>
        /// 新增缓存。
        /// (一般直接写Set("key1",obj)，而不用Set<object>("key1",obj)，因为.net会自动根据obj判断T的类型。)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="timeOut">缓存过期时间</param>
        /// <returns></returns>
        bool Set<T>(string key, T value, int timeOut = -1);
        /// <summary>
        /// 如果不存在key缓存，则添加，返回true。如果已经存在key缓存，则不作操作，返回false。
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="timeOut">缓存过期时间</param>
        /// <returns></returns>
        bool AddIfNotExist<T>(string key, T value, int timeOut = -1);
        /// <summary>
        /// 删除缓存
        /// </summary>
        /// <param name="key"></param>
        void Remove(string key);
        /// <summary>
        /// 一次连接取多个缓存
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="keys"></param>
        /// <returns></returns>
        List<T> GetList<T>(List<string> keys);

    }
}
